# coding: utf-8

def foo(x):
	print "executing foo(%s)" % x

foo(2)

class A(object):

	def foo(self, x):
		print 'executing foo(%s, %s)' % (self, x)

	@classmethod
	def class_foo(cls, x):
		print 'executing foo(%s, %s)' % (cls, x)

	@staticmethod
	def static_foo(x):
		print "executing foo(%s)" % x

a = A()
a.foo(3)
a.class_foo(3)
a.static_foo(3)


'''

这里先理解一下函数参数中的cls,self, 这个cls和self是对类或者实例的绑定
对用一般函数来我们可以这么调用`foo(x)`, 这个是函数最常用的, 它的工作跟
其他任何东西(类, 实例)无关.
实例方法: 我们知道在类里面定义方法的时候需要绑定这个实例就是`foo(self, x)`
调用的时候是这样的
```python
a = A()
a.foo(3)
```
或者这样
```python
a = A()
A.foo(a, 3)
```
类方法: 类方法传递的是类, 要绑定类, 
可以这样调用
```python
A.class_foo(3)
```
静态方法: 不需要绑定类或者实例
可以这样调用
```python
A.static_foo(3)
a = A()
a.static_foo(3)
```
'''